<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>苏晓 - Java后端工程师 [CYBERPUNK]</title>
    <!-- 引入Font Awesome图标库 -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
    <!-- 引入Google Fonts - 终端风格字体 -->
    <link href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&family=Orbitron:wght@900&display=swap" rel="stylesheet">

    <style>
        /* --- 全局样式与变量 --- */
        :root {
            --primary-color: #00BFFF; /* 主色调 - 科技深空蓝 */
            --accent-color: #FF00FF;  /* 高光/点缀色 - 洋红/品红 */
            --glow-primary: rgba(0, 191, 255, 0.8);
            --glow-accent: rgba(255, 0, 255, 0.8);
            --bg-color: #01011a; /* 更深邃的蓝黑色背景 */
            --card-bg: rgba(15, 22, 48, 0.75); /* 卡片背景带一点蓝色调 */
            --border-color: rgba(0, 191, 255, 0.4);
            --text-color: #d0d8e8; /* 文本颜色带一点冷色调，更和谐 */
        }

        body {
            font-family: 'Fira Code', 'Courier New', monospace;
            background-color: var(--bg-color);
            color: var(--text-color);
            line-height: 1.8;
            overflow-x: hidden;
        }

        /* --- 代码雨背景 --- */
        canvas#matrix-bg {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: -1;
        }

        /* --- 主容器与布局 --- */
        .container {
            max-width: 1100px;
            margin: 40px auto;
            padding: 20px;
            position: relative;
            z-index: 1;
        }

        /* --- 卡片样式 --- */
        .card {
            background: var(--card-bg);
            border: 1px solid var(--border-color);
            backdrop-filter: blur(5px);
            -webkit-backdrop-filter: blur(5px);
            padding: 25px;
            margin-bottom: 25px;
            border-radius: 8px;
            box-shadow: 0 0 15px var(--glow-primary), inset 0 0 10px rgba(0, 0, 0, 0.5);
            transition: all 0.4s ease;
            animation: fadeIn 1s ease-out;
        }

        @keyframes fadeIn {
            from { opacity: 0; transform: scale(0.95); }
            to { opacity: 1; transform: scale(1); }
        }

        .card:hover {
            border-color: var(--accent-color);
            box-shadow: 0 0 30px var(--glow-accent);
        }

        /* --- 命令行终端风格个人信息 --- */
        .terminal {
            padding: 20px;
            background: rgba(0, 0, 0, 0.8);
            border-radius: 5px;
        }
        .terminal-line {
            display: flex;
            align-items: center;
            margin-bottom: 5px;
        }
        .prompt {
            color: var(--primary-color);
            text-shadow: 0 0 5px var(--glow-primary);
            margin-right: 10px;
        }
        .command {
            color: #fff;
            white-space: nowrap;
            overflow: hidden;
            border-right: .15em solid var(--primary-color);
            animation: typing 2s steps(40, end), blink-caret .75s step-end infinite;
        }

        @keyframes typing { from { width: 0 } to { width: 100% } }
        @keyframes blink-caret { from, to { border-color: transparent } 50% { border-color: var(--primary-color); } }

        .terminal-output { padding-left: 25px; color: var(--text-color); }
        .terminal-output i { color: var(--primary-color); margin-right: 10px; }
        .terminal-output a { color: var(--primary-color); text-decoration: none; transition: all 0.3s; }
        .terminal-output a:hover { color: var(--accent-color); text-shadow: 0 0 10px var(--glow-accent); }

        /* --- 标题样式 --- */
        .section-title {
            font-family: 'Orbitron', sans-serif;
            font-size: 2em;
            color: var(--primary-color);
            text-shadow: 0 0 10px var(--glow-primary);
            text-align: center;
            margin-bottom: 30px;
            letter-spacing: 3px;
            text-transform: uppercase;
        }
        .section-title::before, .section-title::after {
            content: "/>";
            margin: 0 15px;
            opacity: 0.5;
            color: var(--accent-color);
        }
        .section-title::before { content: "<"; }

        /* --- 项目经验 --- */
        .project-item { margin-bottom: 30px; }
        .project-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            border-bottom: 1px dashed var(--border-color);
            padding-bottom: 10px;
            margin-bottom: 15px;
        }
        .project-title { font-size: 1.5em; color: #fff; }
        .project-title i { color: var(--primary-color); margin-right: 10px; }

        .project-tech-stack { display: flex; gap: 10px; }
        .tech-icon { font-size: 1.5em; color: var(--text-color); transition: all 0.3s; }
        .project-item:hover .tech-icon {
            color: var(--accent-color);
            text-shadow: 0 0 10px var(--glow-accent);
            transform: scale(1.2);
        }

        .project-description ul { list-style: none; padding-left: 0; }
        .project-description ul li { position: relative; padding-left: 25px; margin-bottom: 10px; }
        .project-description ul li::before {
            content: '>';
            position: absolute;
            left: 0;
            top: 0;
            color: var(--primary-color);
            font-weight: 900;
        }
        .project-description li strong { color: var(--primary-color); }

        /* --- 技能矩阵 --- */
        .skills-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; }
        .skill-card {
            background: rgba(0, 191, 255, 0.05);
            padding: 20px;
            border-radius: 5px;
            border: 1px solid var(--border-color);
            text-align: center;
            transition: all 0.3s ease;
        }
        .skill-card:hover {
            transform: translateY(-5px);
            background: rgba(255, 0, 255, 0.1);
            border-color: var(--accent-color);
            box-shadow: 0 0 20px var(--glow-accent);
        }
        .skill-card i { font-size: 3em; color: var(--primary-color); margin-bottom: 15px; transition: all 0.3s; }
        .skill-card:hover i { color: var(--accent-color); }
        .skill-card h4 { font-size: 1.2em; margin: 0; color: #fff; }
    </style>
</head>
<body>
<canvas id="matrix-bg"></canvas>

<div class="container">
    <!-- ========== 个人信息终端 ========== -->
    <div class="card terminal">
        <div class="terminal-line">
            <span class="prompt">guest@suxiao.dev:~$</span>
            <span class="command">./profile.sh</span>
        </div>
        <div class="terminal-output">
            <p><strong>[名称]</strong> 苏晓 / Su Xiao</p>
            <p><i class="fas fa-map-marker-alt"></i> <strong>[坐标]</strong> 西安</p>
            <p><i class="fas fa-crosshairs"></i> <strong>[目标]</strong> Java后端开发工程师</p>
            <p><i class="fas fa-graduation-cap"></i> <strong>[学院]</strong> 西安邮电大学 - 软件工程 (本科, GPA Top 10%)</p>
            <p><i class="fas fa-globe"></i> <strong>[博客]</strong> <a href="http://1.94.165.213" target="_blank">http://1.94.165.213</a></p>
            <p><i class="fas fa-envelope"></i> <strong>[通信]</strong> 1229852569@qq.com</p>
            <p><i class="fas fa-phone"></i> <strong>[线路]</strong> 131-0963-0281</p>
        </div>
    </div>

    <!-- ========== 项目经历 ========== -->
    <div class="card">
        <h2 class="section-title">< 项目矩阵 /></h2>

        <div class="project-item">
            <div class="project-header">
                <h3 class="project-title"><i class="fas fa-cogs"></i> 编程客栈</h3>
                <div class="project-tech-stack">
                    <i class="fab fa-java" title="Java/Spring Boot"></i>
                    <i class="fas fa-database" title="MySQL"></i>
                    <i class="fab fa-redhat" title="Redis"></i>
                    <i class="fas fa-search" title="ElasticSearch"></i>
                    <i class="fas fa-envelope-open" title="RabbitMQ"></i>
                </div>
            </div>
            <div class="project-description">
                <p><strong>项目简介：</strong>面向开发者的技术内容分享与交流平台，实现发帖、点赞、评论、消息推送、实时搜索、用户排行等全功能模块。</p>
                <ul>
                    <li>利用 <strong>ThreadLocal</strong> 构建用户上下文，实现请求链路中的高效用户信息传递与线程隔离。</li>
                    <li>构建 <strong>Caffeine + Redis</strong> 多级缓存架构，结合互斥锁策略，有效应对热点数据访问并防止缓存击穿。</li>
                    <li>活用 <strong>Redis (ZSet, Lua)</strong> 实现用户活跃度排行、分布式原子抢券等复杂业务，并通过Canal同步解决数据库与ES的缓存一致性。</li>
                    <li>引入 <strong>RabbitMQ</strong> 异步处理点赞、评论、系统消息等非核心业务，实现系统解耦与流量削峰，并配置重试及死信队列保障消息最终一致性。</li>
                    <li>接入 <strong>ElasticSearch</strong> 实现全文检索，并设计兼容MySQL查询的降级方案，保障系统高可用性。</li>
                </ul>
            </div>
        </div>

        <div class="project-item">
            <div class="project-header">
                <h3 class="project-title"><i class="fas fa-database"></i> JavaDB - 简易版MySQL内核实现</h3>
                <div class="project-tech-stack">
                    <i class="fab fa-java" title="Core Java"></i>
                    <i class="fas fa-file-alt" title="Log/IO"></i>
                    <i class="fas fa-users-cog" title="MVCC"></i>
                    <i class="fas fa-sitemap" title="B+ Tree"></i>
                </div>
            </div>
            <div class="project-description">
                <p><strong>项目简介：</strong>从零构建的简易版关系型数据库，涵盖事务、存储、日志、并发控制与索引等核心模块。</p>
                <ul>
                    <li>设计并实现遵循 <strong>ACID</strong> 原则的事务管理器，保障数据库的原子性、一致性、隔离性和持久性。</li>
                    <li>引入 <strong>MVCC</strong> 机制实现并发控制，支持读已提交（RC）和可重复读（RR）两种隔离级别，并设计死锁检测机制。</li>
                    <li>自主实现基于引用计数的<strong>缓存管理框架</strong>，结合日志刷盘策略，优化I/O性能。</li>
                    <li>基于 <strong>B+树</strong> 结构实现聚簇索引，并构建表管理器以支持表结构定义及SQL解析。</li>
                </ul>
            </div>
        </div>
    </div>

    <!-- ========== 专业技能 ========== -->
    <div class="card">
        <h2 class="section-title">< 技能兵工厂 /></h2>
        <div class="skills-grid">
            <div class="skill-card">
                <i class="fab fa-java"></i>
                <h4>Java 核心</h4>
                <p>精通基础/集合/JUC/JVM</p>
            </div>
            <div class="skill-card">
                <i class="fas fa-leaf"></i>
                <h4>Spring 生态</h4>
                <p>SpringBoot/MVC/MyBatis</p>
            </div>
            <div class="skill-card">
                <i class="fas fa-database"></i>
                <h4>MySQL</h4>
                <p>索引优化/事务/慢查询</p>
            </div>
            <div class="skill-card">
                <i class="fab fa-redhat"></i>
                <h4>Redis</h4>
                <p>多级缓存/数据结构/高可用</p>
            </div>
            <div class="skill-card">
                <i class="fas fa-envelope-open-text"></i>
                <h4>RabbitMQ</h4>
                <p>可靠投递/异步解耦/削峰</p>
            </div>
            <div class="skill-card">
                <i class="fas fa-search"></i>
                <h4>ElasticSearch</h4>
                <p>全文检索/数据同步</p>
            </div>
            <div class="skill-card">
                <i class="fab fa-linux"></i>
                <h4>Linux & 工具</h4>
                <p>常用命令/Git/Postman</p>
            </div>
            <div class="skill-card">
                <i class="fas fa-project-diagram"></i>
                <h4>设计模式</h4>
                <p>单例/工厂/策略等</p>
            </div>
        </div>
    </div>

</div>

<script>
    // --- 代码雨背景脚本 ---
    const canvas = document.getElementById('matrix-bg');
    const ctx = canvas.getContext('2d');

    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;

    const alphabet = 'アァカサタナハマヤャラワガザダバパイィキシチニヒミリヰギジヂビピウゥクスツヌフムユュルグズブヅプエェケセテネヘメレヱゲゼデベペオォコソトノホモヨョロヲゴゾドボポヴッンABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    const fontSize = 16;
    const columns = canvas.width / fontSize;
    const rainDrops = [];

    for (let x = 0; x < columns; x++) {
        rainDrops[x] = 1;
    }

    const draw = () => {
        ctx.fillStyle = 'rgba(1, 1, 26, 0.05)';
        ctx.fillRect(0, 0, canvas.width, canvas.height);

        ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--primary-color').trim();
        ctx.font = fontSize + 'px monospace';

        for (let i = 0; i < rainDrops.length; i++) {
            const text = alphabet.charAt(Math.floor(Math.random() * alphabet.length));
            ctx.fillText(text, i * fontSize, rainDrops[i] * fontSize);

            if (rainDrops[i] * fontSize > canvas.height && Math.random() > 0.975) {
                rainDrops[i] = 0;
            }
            rainDrops[i]++;
        }
    };

    let intervalId = setInterval(draw, 33);

    window.addEventListener('resize', () => {
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
        // You might need to re-initialize columns and rainDrops here if you want it to be fully responsive
    });
</script>
</body>
</html>